/**
 * 
 */
package mm.back.filtros;

import java.io.Serializable;

import org.hibernate.Query;

/**
 * @author PUSDERKIS
 *
 */
public class ProductosFiltro implements Serializable, HibernateHQLFilter {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -635402651481454665L;
	
	private Long codigo;
	private String nombre;
	private Boolean bajoStock;
	private Boolean activo;
	private Long rubroId;
	private Boolean rubroActivo;
	
	/**
	 * @return the rubroActivo
	 */
	public Boolean getRubroActivo() {
		return rubroActivo;
	}
	/**
	 * @param rubroActivo the rubroActivo to set
	 */
	public void setRubroActivo(Boolean rubroActivo) {
		this.rubroActivo = rubroActivo;
	}
	/**
	 * @return the codigo
	 */
	public Long getCodigo() {
		return codigo;
	}
	/**
	 * @param codigo the codigo to set
	 */
	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}
	/**
	 * @return the nombre
	 */
	public String getNombre() {
		return nombre;
	}
	/**
	 * @param nombre the nombre to set
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	/**
	 * @return the bajoStock
	 */
	public Boolean getBajoStock() {
		return bajoStock;
	}
	/**
	 * @param bajoStock the bajoStock to set
	 */
	public void setBajoStock(Boolean bajoStock) {
		this.bajoStock = bajoStock;
	}
	/**
	 * @return the activo
	 */
	public Boolean getActivo() {
		return activo;
	}
	/**
	 * @param activo the activo to set
	 */
	public void setActivo(Boolean activo) {
		this.activo = activo;
	}
	
	/**
	 * 
	 * @see mm.back.filtros.HibernateHQLFilter#getWhereClause(java.lang.String[])
	 */
	public String getWhereClause(String ... alias) {
		
		String aliasProducto=alias[0]+".";
		String aliasRubro="rubro.";
		
		if (alias.length == 2){
			aliasRubro=alias[1]+".";
		}
		
		StringBuffer sb = new StringBuffer();
		if (activo != null){
			sb.append(" AND ");
			sb.append(aliasProducto);
			sb.append("activo = :activo");
		}
		
		if (nombre != null && !"".equals(nombre)){
			sb.append(" AND ");
			sb.append(aliasProducto);
			sb.append("nombre like :nombre ");
		}
		
		
		if (codigo != null && codigo != 0l){
			sb.append(" AND ");
			sb.append(aliasProducto);
			sb.append("id = :id_Producto ");
		}
		
		if (bajoStock != null && bajoStock){
			sb.append(" AND ");
			sb.append(aliasProducto);
			sb.append("stock <= ");
			sb.append(aliasProducto);
			sb.append("stockMin ");
		}
		
		if (rubroId != null && rubroId != 0l){
			sb.append(" AND ");
			sb.append(aliasRubro);
			sb.append("id = :rubroId ");
		}
		

		if (getRubroActivo() != null){
			sb.append(" AND ");
			sb.append(aliasRubro);
			sb.append("activo = :rubroActivo ");
		}
		
		return sb.toString();
	}
	/**
	 * @return the rubroId
	 */
	public Long getRubroId() {
		return rubroId;
	}
	/**
	 * @param rubroId the rubroId to set
	 */
	public void setRubroId(Long rubroId) {
		this.rubroId = rubroId;
	}
	/** 
	 * @see mm.back.filtros.HibernateHQLFilter#setWhereParameters(org.hibernate.Query)
	 */
	public void setWhereParameters(Query query) {
		
		if (activo != null){
			query.setBoolean("activo", getActivo());
		}
		
		if (nombre != null && !"".equals(nombre)){
			query.setString("nombre", "%"+getNombre()+"%");
		}
		
		
		if (codigo != null && codigo != 0l){
			query.setLong("id_Producto", getCodigo());
		}
		
		
		if (rubroId != null && rubroId != 0l){
			query.setLong("rubroId",getRubroId());
		}
		
		if (getRubroActivo() != null){
			query.setBoolean("rubroActivo", Boolean.TRUE);
		}
		
	}
	
	
	

}
